package jus.poc.prodcons.v6;

/**
 * Implémentation d'un sémaphore, une structure de gestion de ressources.
 *
 * @author Nunes Thomas <nds.thomas@gmail.com>
 * @author Feng Xu <fengxu1989@gmail.com>
 */
public class Semaphore {

    int ressources;

    /**
     * Constructeur
     *
     * @param nbRessources le nombre de qu'autorise le sémaphore.
     */
    public Semaphore(int nbRessources) {
        ressources = nbRessources;
    }

    /**
     * Prend une ressource
     *
     * @throws InterruptedException
     */
    public synchronized void P() throws InterruptedException {
        ressources--;
        if (ressources < 0) {
            wait();
        }
    }

    /**
     * Libère une ressource
     */
    public synchronized void V() {
        ressources++;
        if (ressources <= 0) {
            notify();
        }
    }
}
